﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Intelsi.Entity;
using Microsoft.Practices.Unity;

namespace Intelsi.DataAcces
{
    public class DetalleEntradaProductosDAO: MasterDataAccess, IDetalleEntradaProductosDAO
    {
        public void RegistrarDetalleEntrada(List<DetalleEntradaProductoDTO> detalle, int idEntrada)
        {
            foreach (var item in detalle)
            {
                item.IdEntradaProducto = idEntrada;
                RegistrarDetalleEntrada(item);
            }
        }

        public void RegistrarDetalleEntrada(DetalleEntradaProductoDTO detalle)
        {
            DetalleEntradaProducto detaEntraPro = new DetalleEntradaProducto();

            detaEntraPro.Item = detalle.Item;
            detaEntraPro.IdEntradaProducto = detalle.IdEntradaProducto;

            var existe = (from dep in Context.DetalleEntradaProductos
                          where dep.IdEntradaProducto == detaEntraPro.IdEntradaProducto
                          where dep.IdProducto == detaEntraPro.IdProducto
                          select dep).SingleOrDefault();
            if (existe == null)
            {
                detaEntraPro.IdProducto = detalle.IdProducto;
                detaEntraPro.Cantidad = detalle.Cantidad;

                Context.DetalleEntradaProductos.Add(detaEntraPro);
                Context.SaveChanges();
            }
            else
            {
                existe.IdProducto = detalle.IdProducto;
                existe.Cantidad = detalle.Cantidad;

                Context.Entry(existe).State = System.Data.EntityState.Modified;
                Context.SaveChanges();
            }
        }

        public List<DetalleEntradaProductoDTO> GetAllFromDetalleEntradaByIdEntrada(int idEntrada)
        {
            var query = from dep in Context.DetalleEntradaProductos
                        where (dep.IdEntradaProducto.Equals(idEntrada))

                        join pro in Context.Productoes on dep.IdProducto equals pro.IdProducto
                        join cat in Context.Categorias on pro.IdCategoria equals cat.IdCategoria
                        join mar in Context.Marcas on pro.IdMarca equals mar.IdMarca

                        select new DetalleEntradaProductoDTO
                        {
                            IdProducto = dep.IdProducto.Value,
                            IdEntradaProducto = dep.IdEntradaProducto,
                            NombreCategoria = cat.Nombre,
                            NombreMarca = mar.Nombre,
                            DescripcionProducto = pro.Nombre,
                            Cantidad = dep.Cantidad.Value,
                            UniMedida = pro.UniMedida
                        };

            return query.ToList();
        }
    }
}
